package com.lntu.meeting.common;



import com.lntu.meeting.ReserveForm.ReserveForm;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public  class checkDate {

    /**
    *  判断是否可以预约
    * @param : Date dataStartDate     该会议室已经预约的开始时间
    * @param : Date dataEndDate       该会议室已经预约的结束时间
    * @param : Date reserveStartDate  该会议室准备预约的开始时间
    * @param : Date reserveEndDate    该会议室准备预约的结束时间
    * @return : false                 该区间内不可预约
    * @return : true                 该区间内可以预约
    */
    public static boolean checkDate(Date dataStartDate, Date dataEndDate, Date reserveStartDate,Date reserveEndDate) {

        //该会议室已经预约的开始时间
        Calendar dataStartCalendar = Calendar.getInstance();
        dataStartCalendar.setTime(dataStartDate);

        //该会议室已经预约的结束时间
        Calendar dataEndCalendar = Calendar.getInstance();
        dataEndCalendar.setTime(dataEndDate);

        //准备预约的开始时间
        Calendar reserveStartCalendar = Calendar.getInstance();
        reserveStartCalendar.setTime(reserveStartDate);

        //准备预约的结束时间
        Calendar reserveEndCalendar = Calendar.getInstance();
        reserveStartCalendar.setTime(reserveEndDate);

        //该会议室已经预约开始的毫秒数
        Long dataStartTimeInMillis = dataStartCalendar.getTimeInMillis();

        //该会议室已经预约结束的毫秒数
        Long dataEndTimeInMillis = dataEndCalendar.getTimeInMillis();

        //准备预约开始的毫秒数
        Long startTimeInMillis = reserveStartCalendar.getTimeInMillis();

        //准备预约的结束时间
        Long endTimeInMillis = reserveEndCalendar.getTimeInMillis();

        //查看预约的时间是否在已经预约
        //开始预约的时间可以和数据库里结束预约的时间相等，结束预约的时间可以和数据库里开始的时间相等
        if(startTimeInMillis >= dataStartTimeInMillis && startTimeInMillis < dataEndTimeInMillis ||
                endTimeInMillis < dataStartTimeInMillis && endTimeInMillis >= dataStartTimeInMillis) {
             return false;
        }
      return true;
    }

    public static Date formatDate(String str){

        SimpleDateFormat format;

        if(str.length()<=10){
             format=new SimpleDateFormat("yyyy-MM-DD");//这里只要年月日小时
        }else {
             format=new SimpleDateFormat("yyyy-MM-DD-hh");//这里只要年月日小时
        }
        //使用SimpleDateFormat类里的构造方法，
        //并定义好Date类格式 (年-月-日 时-分-秒 )yyyy-MM-DD hh:mm:ss该格式就是你输入的日期格式

        try {

            //需要处理一下异常
            Date date = format.parse(str);

            return date;

        } catch (ParseException e) {

            e.printStackTrace();

        }

        //str写的格式不对，就返回null
        return null ;
    }

    public static boolean judgmentTime (ReserveForm reserveForm){


        Calendar stDate = Calendar.getInstance();
        stDate.setTime(formatDate(reserveForm.getDate()));

        Calendar edDate = Calendar.getInstance();
        edDate.setTime(formatDate(reserveForm.getEndDate()));

        //判断开始时间是否大约结束时间同时结束时间是否大于21点
        if(edDate.getTimeInMillis()>stDate.getTimeInMillis()&& reserveForm.getEndTime()<=21){
             return true;
        }

        //不可以预约
        return false;
    }
}